package com.sxt.sys.controller;


import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sxt.pro.pojo.Menu;
import com.sxt.pro.service.MenuService;
import com.sxt.pro.vo.MenuVo;
import com.sxt.sys.common.Constast;
import com.sxt.sys.common.DataGridView;
import com.sxt.sys.common.TreeNode;
import com.sxt.sys.common.TreeNodeBuilder;
import com.sxt.sys.common.WebUtils;
import com.sxt.sys.domain.BankUser;
import com.sxt.sys.service.RoleService;

/**
 * <p>
 *  菜单管理前端控制器
 * </p>
 *
 * @author 老雷
 * @since 2019-09-21
 */
@RestController
@RequestMapping("/menu")
public class MenuController {

	
	
	@Autowired
	private RoleService roleService;
	
	@Autowired
	private MenuService menuService;
	
	/**
	 * 方案一：根据用户的角色权限去展示菜单列表
	 * @param permissionVo
	 * @return
	 */
	@RequestMapping("loadLeftMenuJson")
	public DataGridView  loadLeftMenuJson(MenuVo menuVo) {
		//查询所有菜单
		QueryWrapper<Menu> queryWrapper=new QueryWrapper<>();
		//设置只能查询菜单:0显示 1隐藏 \ 0正常 1停用
		queryWrapper.eq("visible",Constast.TYPE_VISIBLE);
		queryWrapper.eq("status", Constast.TYPE_STATUS);
		
		BankUser bankuser = (BankUser) WebUtils.getSession().getAttribute("bankuser");
		List<Menu> list=null;
		//判断用户是不是超级管理员
		if(bankuser.getUsertype().equals(Constast.USER_TYPE_SUPER)) {
			list = menuService.list(queryWrapper);
		}else {
			//根据用户ID+角色+权限去查询 
			Integer userId=bankuser.getId();
			//根据用户ID查询角色
			List<Integer> currentUserRoleIds = roleService.queryUserRoleIdsByUid(userId);
			//根据角色ID取到权限和菜单ID
			Set<Integer> mids=new HashSet<>();
			for (Integer rid : currentUserRoleIds) {
				List<Integer> menuIds = roleService.queryRoleMenuIdsByRid(rid);
				mids.addAll(menuIds);
			}
			
			//根据角色ID查询权限
			if(mids.size()>0) {
				queryWrapper.in("id", mids);
				list=menuService.list(queryWrapper);
			}else {
				list =new ArrayList<>();
			}
		}
		List<TreeNode> treeNodes=new ArrayList<>();
		for (Menu p : list) {
			Integer id=p.getId();            //主键
			Integer pid=p.getParentid();          //父级id
			String title=p.getMenuname();       //名称
			String icon=p.getIcon();         //图标
			String href=p.getComponent();         //请求地址
			Boolean spread=false;   //默认不展开
			treeNodes.add(new TreeNode(id, pid, title, icon, href, spread));
		}
		//构造层级关系
		List<TreeNode> list2 = TreeNodeBuilder.build(treeNodes, 1);
		return new DataGridView(list2);
	}

	
	/**
	 * 方案二：根据menu表中的menu_type：D 展示左侧列表
	 * @param menuVo
	 * @return
	 */
	@RequestMapping("loadIndexLeftMenuJson")
	public DataGridView  loadIndexLeftMenuJson(MenuVo menuVo) {
		//查询所有菜单
		QueryWrapper<Menu> queryWrapper=new QueryWrapper<>();
		//设置只能查询菜单
		queryWrapper.eq("menu_type",Constast.TYPE_MNEUN);
		
		List<Menu> list=null;
			list = menuService.list(queryWrapper);
			
		List<TreeNode> treeNodes=new ArrayList<>();
		for (Menu p : list) {
			Integer id=p.getId();            //主键
			Integer pid=p.getParentid();          //父级id
			String title=p.getMenuname();       //名称
			String icon=p.getIcon();         //图标
			String href=p.getComponent();         //请求地址
			Boolean spread=false;   //默认不展开
			treeNodes.add(new TreeNode(id, pid, title, icon, href, spread));
		}
		//构造层级关系
		List<TreeNode> list2 = TreeNodeBuilder.build(treeNodes, 1);
		return new DataGridView(list2);
	}
	
	
	
	
	
	

}

